package com.lyf.shop.web.controller;

import com.lyf.shop.common.Const;
import com.lyf.shop.entity.Cart;
import com.lyf.shop.entity.Product;
import com.lyf.shop.entity.User;
import com.lyf.shop.services.CartService;
import com.lyf.shop.services.Impl.CartServiceImpl;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@WebServlet(value = "/cart")
public class CartController extends BaseController{
    private CartService cartService = new CartServiceImpl();

    /**
     *
     * @param request
     * @param response
     */
    public  void  updateCartNum(HttpServletRequest request,HttpServletResponse response){
        //我们可能需要使用到uid
        User user = (User) request.getSession().getAttribute(Const.UserConst.LOGIN_USER);
        Integer pid = Integer.valueOf(request.getParameter("pid"));//商品id
        Integer num = Integer.valueOf(request.getParameter("num"));//商品 1加 -1减
        Integer price = Integer.valueOf(request.getParameter("price"));//单价
        //0,即触发删除动作
        Cart cart = cartService.findCart(user.getUid(),pid);//使用Uid+pid来查询到这条购物车的数据
        int proNum = cart.getCnum()+num;//如果是-1 变成原数量-1  如果是1，原数量加1
        if(proNum==0){//操作商品数量后，数量为0即做删除东西
            cartService.delCart(user.getUid(),pid) ;
        }else {
            cart.setCnum(proNum);//1  -1
            cart.setCcount(cart.getCcount()+(num*price));//40 +(-1*20)
            cartService.updateCart(cart);
        }
    }

    /**
     * 修改前端
     * @param request
     * @param response
     */
    public void updateCartNum2(HttpServletRequest request, HttpServletResponse response){
        //我们可能需要使用到uid
        User user = (User) request.getSession().getAttribute(Const.UserConst.LOGIN_USER);
        Integer pid = Integer.valueOf(request.getParameter("pid"));
        Integer num = Integer.valueOf(request.getParameter("num"));
        Integer price = Integer.valueOf(request.getParameter("price"));
        //0,即触发删除动作
        if(num==0){
            cartService.delCart(user.getUid(),pid);
        }else {
            //调用业务层做数据变化处理
            Cart cart = new Cart();
            Product product = new Product();
            //设置商品数量
            cart.setCnum(num);
            //设置用户id
            cart.setUid(user.getUid());
            //创建了商品的对象，设置他的商品id，因为dao里面我们需要使用到pid来修改数据
            product.setPid(pid);
            //把创建处理的商品对象赋值给购物车
            cart.setProduct(product);
            //设置购物车的小计金额
            cart.setCcount(num*price);
            //修改业务调用
            cartService.updateCart(cart);
        }
    }

    /**
     * 1.前端删除的都是同一个方法调用
     * 2.他们传递的参数不一样，清空调用是传递的pid为0，删除传递的数据为要删除的商品的pid
     * 3.根据传入的pid的值 如果为0，即删除uid名下所有的购物车数据====》清空购物车
     *          dao的参数 uid
     * 4.根据传入的pid的值如果不为0，即删除uid名下的对应pid商品的数据====>删除购物车数据
     *          uid  pid 用于确认是哪条数据需要被删除
     * @param request
     * @param response
     * @return
     */
    public String clearCart(HttpServletRequest request, HttpServletResponse response){
        //我们可能需要用到uid
        User user = (User) request.getSession().getAttribute(Const.UserConst.LOGIN_USER);
        //
        Integer pid = Integer.valueOf(request.getParameter("pid"));
        cartService.delCart(user.getUid(),pid);
        return Const.FORWARD+"/cart?method=showCart";
    }

    /**
     * 判断用户是否有登录有登录才进行数据查询
     * 展示的诗句是有商品名及商品价格等商品表数据
     * 所以要进行联表查询
     * @param request
     * @param response
     * @return
     */
    public String showCart(HttpServletRequest request, HttpServletResponse response){
        //验证用户是否登录
        User user = (User) request.getSession().getAttribute(Const.UserConst.LOGIN_USER);
        String pid = request.getParameter("pid");
        if (user==null){
            return Const.REDIRECT+"/login.jsp";
        }
        List<Cart> cart = cartService.findCart(user.getUid());
        request.setAttribute("carts",cart);
        return Const.FORWARD+"/cart.jsp";
    }
    /**
     *1.当我们用户点击加入购物车的时候，需要进行验证登录
     * 2.当我们点击加入购物车的时候，如果用户已经登录了，验证用户的购物车是否已经有该商品存在
     * 如果存在就在购物车的数据基础数量上加一，否则就新增一条数据
     * @param request
     * @param response
     * @return
     */
    public String operationCart(HttpServletRequest request, HttpServletResponse response){
        //验证用户是否登录
        User user = (User) request.getSession().getAttribute(Const.UserConst.LOGIN_USER);
        String pid = request.getParameter("pid");
        if (user==null){
            return Const.REDIRECT+"/login.jsp";
        }
        //让用户操作购物车
        cartService.operation(user.getUid(),Integer.valueOf(pid));

        return Const.FORWARD+"/cartSuccess.jsp";
    }
}
